﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace _4_4
{
    public partial class Form1 : Form
    {
        private FontStyle _currentStyle = FontStyle.Regular;
        public Form1()
        {
            InitializeComponent();
            // 初始化：默认参数（参考文档1-51）
            txt_Param.Text = "3.14159";
            // 初始化字体样式（与txt_Result默认样式一致）
            _currentStyle = txt_Result.Font.Style;
            // 启动时自动计算一次默认结果
            CalculateTrigonometric();
        }

        private void txt_Param_Leave(object sender, EventArgs e)
        {
            if (string.IsNullOrWhiteSpace(txt_Param.Text))
            {
                MessageBox.Show("参数不能为空！请输入数字（如3.14159）", "提示",
                                MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txt_Param.Focus(); // 光标回到参数框，强制补填
                return;
            }

            // 2. 验证是否为有效数字（用TryParse替代try-catch，性能更优）
            if (!double.TryParse(txt_Param.Text, out _))
            {
                MessageBox.Show("参数必须是数字！请重新输入", "错误",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                txt_Param.Text = ""; // 清空错误输入
                txt_Param.Focus();
                return;
            }

            // 3. 验证通过：自动更新结果（可选，提升体验）
            CalculateTrigonometric();
        }

        private void rb_Sin_CheckedChanged(object sender, EventArgs e)
        {
            if (rb_Sin.Checked) // 仅选中时计算（避免取消选中触发）
                CalculateTrigonometric();
        }

        private void rb_Cos_CheckedChanged(object sender, EventArgs e)
        {
            if (rb_Cos.Checked)
                CalculateTrigonometric();
        }

        private void rb_Tan_CheckedChanged(object sender, EventArgs e)
        {
            if (rb_Tan.Checked)
                CalculateTrigonometric();
        }
        private void CalculateTrigonometric()
        {
            // 已提前通过Leave事件验证，此处无需重复try-catch（优化效率）
            double param = double.Parse(txt_Param.Text);
            double result = 0;

            // 根据选中的函数计算结果
            if (rb_Sin.Checked) result = Math.Sin(param);
            else if (rb_Cos.Checked) result = Math.Cos(param);
            else if (rb_Tan.Checked) result = Math.Tan(param);

            // 结果保留2位小数（参考文档1-73、1-77）
            txt_Result.Text = Math.Round(result, 2).ToString();
        }
        private void cb_Bold_CheckedChanged(object sender, EventArgs e)
        {
            // 异或（^）：勾选则添加粗体，取消则移除（无需判断当前状态）
            _currentStyle ^= FontStyle.Bold;
            UpdateResultFont(); // 应用样式到txt_Result
        }

        /// <summary>
        /// 斜体CheckBox变化：仅切换斜体样式
        /// </summary>
        private void cb_Italic_CheckedChanged(object sender, EventArgs e)
        {
            _currentStyle ^= FontStyle.Italic;
            UpdateResultFont();
        }

        /// <summary>
        /// 红色CheckBox变化：仅切换字体颜色
        /// </summary>
        private void cb_Red_CheckedChanged(object sender, EventArgs e)
        {
            // 仅更新颜色，不修改样式（功能解耦）
            txt_Result.ForeColor = cb_Red.Checked ? Color.Red : Color.Black;
        }

        /// <summary>
        /// 统一更新结果文本框字体（避免重复代码）
        /// </summary>
        private void UpdateResultFont()
        {
            // 复用当前字体的名称和大小，仅更新样式（优化性能）
            txt_Result.Font = new Font(txt_Result.Font.Name, txt_Result.Font.Size, _currentStyle);
        }
    }
}
